package com.lieve.tx.proxy;

import org.objenesis.Objenesis;
import org.objenesis.ObjenesisStd;
import org.objenesis.instantiator.ObjectInstantiator;

/**
 * 在类库中经常会有类必须拥有一个默认构造器的限制。Objenesis通过绕开对象实例构造器来克服这个限制
 * 实例化一个对象而不调用构造器是一个特殊的任务，然而在一些特定的场合是有用的：
 * Objenesis 典型使用
 * 序列化，远程调用和持久化-对象需要实例化并存储为到一个特殊的状态，而没有调用代码。
 * 代理，AOP库和Mock对象-类可以被子类继承，而子类不用担心父类的构造器
 * 容器框架-对象可以以非标准的方式被动态实例化
 * @author sunyoboy
 * 2020/9/18
 */
public class App {
    public static void main(String[] args) {
        Objenesis objenesis = new ObjenesisStd();
        ObjectInstantiator<Person> instantiator = objenesis.getInstantiatorOf(Person.class);
        Person p1 = instantiator.newInstance();
        p1.show();

        Person p2 = instantiator.newInstance();
        p2.show();
    }
}
